home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / CC_C / 0574.ZIP / GETW.ASM < prev    next >
Assembly Source File  |  1986-08-28  |  933b  |  68 lines

  1. include compiler.inc
  2.  
  3.     ttl    GETW, 1.04, 08-28-86, clr
  4.  
  5.  
  6. ;single word stream input
  7.  
  8.     dseg
  9.     extrn    _ftb:byte
  10.  
  11.     cseg
  12.  
  13.     xtfs    <read,$strhand>
  14.  
  15.     procdef    getw, <<strm, ptr>>
  16.     locs    <<bufp,ptr>>
  17.     pushreg
  18.  
  19.     callit    $strhand <<strm,ptr>>
  20.     inc    ax
  21.     jz    reteof
  22.     dec    ax            ;ax holds handle
  23.  
  24.     ldptr    si,strm            ;re-load stream pointer
  25.  
  26.     test    bl,1
  27.     jz    seterr            ;not open for reading
  28.     test    bl,18h
  29.     jnz    reteof            ;already set
  30.  
  31.     pushds
  32.     push    si
  33.     mov    bx,2            ;count
  34.  
  35.     callit    read,<<bx,reg>,<bufp,ptr>,<ax,reg>>
  36.     push    ax
  37.     ldptr    si,bufp
  38.     cld
  39.     lodsw
  40.     mov    di,ax
  41.     pop    ax
  42.     pop    si
  43.     popds
  44.     or    ax,ax
  45.     jz    seteof            ;nothing returned - set EOF
  46.     inc    ax
  47.     or    ax,ax            ;error!
  48.     jz    seterr
  49.     jmp    getval
  50.  
  51. seterr:
  52.     or    byte ptr 2[si],10h    ;set error flag
  53.     jmp    reteof
  54. seteof:
  55.     or    byte ptr 2[si],08h    ;yes, set EOF
  56. reteof:
  57.     mov    ax,-1
  58.     jmp    short fini
  59. ;
  60. getval:
  61.     mov    ax,di            ;and return byte
  62. fini:
  63.     pret
  64.  
  65.     pend    getw
  66.  
  67.     finish
  68.